var createError = require('http-errors')
var express = require('express')
var path = require('path')
var cors = require('cors')
var cookieParser = require('cookie-parser')
var logger = require('morgan')

var indexRouter = require('./routes/index')

var app = express()

// view engine setup
app.set('views', path.join(__dirname, 'views'))
app.set('view engine', 'pug')

app.use(logger('dev'))
app.use(express.json())
app.use(express.urlencoded({ extended: false }))
app.use(cookieParser())
app.use(express.static(path.join(__dirname, 'public')))

var { expressjwt: jwt } = require('express-jwt')
const config = require('./config/index')

app.use(
  jwt({
    // 签名的密钥 或 PublicKey
    secret: config.jwtSecretKey,
    algorithms: config.algorithms,
    credentialsRequired: false, // 无 Token 请求不进行解析和抛出异常
  }).unless({
    // 指定路径不经过 Token 解析
    path: config.path,
  }),
)

app.use(
  cors({
    origin: '*',
    methods: 'GET,HEAD,PUT,PATCH,POST,DELETE',
    preflightContinue: false,
    optionsSuccessStatus: 204,
  }),
)

const { handleSend } = require('./utils/handleSend')
app.use(handleSend)

app.use('/api', indexRouter)

// catch 404 and forward to error handler
app.use(function (req, res, next) {
  next(createError(404))
})


// 处理非404的错误
const errHandleSend = (err, req, res, next) => {
  console.log(err)

  const errorMsg = err.message
  res.status(err.status || 500).json({
    code: 9999,
    success: false,
    message: errorMsg,
    data: {},
  })
}

app.use(errHandleSend)

// error handler
// app.use(function(err, req, res, next) {
//   // set locals, only providing error in development
//   res.locals.message = err.message;
//   res.locals.error = req.app.get('env') === 'development' ? err : {};

//   // render the error page
//   res.status(err.status || 500);
//   res.render('error');
// });

module.exports = app
